package modelo;

import java.util.ArrayList;

import modelo.vista.LoteSimpleView;
import modelo.vista.LoteView;
import modelo.vista.MineralLoteView;

import org.jdesktop.observablecollections.ObservableCollections;
import org.jdesktop.observablecollections.ObservableList;

public class LoteSimple extends Lote  {

	// Tipo de estado en que se encuentra el lote
	public enum Estado {SIMPLE, COMPUESTO}
	
	private Estado estado;
	private float areaSiembra;
	private Propietario propietario;
	private ObservableList<MineralLote> minerales =  ObservableCollections.observableList(new ArrayList<MineralLote>());

	
	

	public LoteSimple(int nroLote) {
		super();
	}


	public LoteSimple(int nroLote, Estado estado, float areaSiembra,
			ObservableList<MineralLote> minerales, Propietario propretario) {
		super(nroLote);
		this.estado = estado;
		this.areaSiembra = areaSiembra;
		this.minerales = minerales;
		this.propietario = propretario;
	}

	public LoteSimple(LoteSimpleView sl, Propietario propietarioDeLote) {
		super(sl.getNroLote());
		this.estado = Estado.SIMPLE;
		this.areaSiembra = sl.getAreaSiembra();
		for(int i = 0; i < sl.getMinerales().size(); i++){
			MineralLote mL = new MineralLote(sl.getMinerales().get(i));
			this.minerales.add(mL);
		}
		this.propietario = propietarioDeLote;
	}

	public LoteSimple(int id, EstadoActividad estadoA, Cereal c,
			Estado estado, ObservableList<MineralLote> vml, Propietario p,float area) {
		this.nroLote = id;
		this.estadoActividad = estadoA;
		this.ultimoCerealSembrado = c;
		this.estado = estado;
		this.areaSiembra = area;
		this.minerales = vml;
		this.propietario = p;
	}


	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public float getAreaSiembra() {
		return areaSiembra;
	}

	public void setAreaSiembra(float areaSiembra) {
		this.areaSiembra = areaSiembra;
	}

	public ObservableList<MineralLote> getMinerales() {
		return minerales;
	}

	public void setMinerales(ObservableList<MineralLote> minerales) {
		this.minerales = minerales;
	}

	public Propietario getPropretario() {
		return propietario;
	}

	public void setPropretario(Propietario propretario) {
		this.propietario = propretario;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof LoteSimple && ((LoteSimple) obj).getNroLote() == this.getNroLote())
			return true;
		return false;
	}

	@Override
	public String toString() {
		return "Lote: " + String.valueOf(this.getNroLote());
	}


	@Override
	public LoteView getView() {
		ObservableList<MineralLoteView> mineralesAPasar = ObservableCollections.observableList(new ArrayList<MineralLoteView>());
		for(int i = 0; i < this.minerales.size(); i++){
			mineralesAPasar.add(this.minerales.get(i).getView());
		}
		return new LoteSimpleView(this.getNroLote(), this.getEstado(), this.getAreaSiembra(), 
				mineralesAPasar, this.getPropretario().getView());
	}
	
	public String getMineralesLote(){
		String cadena = "";
		for(int i=0;i<this.minerales.size();i++)
			cadena = cadena + this.minerales.get(i).getMineral().toString() + ","; 
		return cadena;
	}
	
	public String getPorcentajesMineralesLote(){
		String cadena = "";
		for(int i=0;i<this.minerales.size();i++)
			cadena = cadena + this.minerales.get(i).getPorcentaje() + ","; 
		return cadena;
	}


	@Override
	public boolean dniCoinciConPropietario(String dni) {
		if(this.propietario.getDni().equals(dni) && this.estado.equals(Estado.SIMPLE) && this.estadoActividad.equals(EstadoActividad.SEMBRADO))
			return true;
		else
			return false;
	}


	
}
